package main

import (
	"fmt"
)

/**
new函数
1、创建变量的另一种方式是：调用内建的new函数。
2、表达式：new(T) ,将创建一个T类型的匿名变量，初始化为T类型的零值，然后返回变量地址，返回的指针类型是*T。
*/

func main() {
	// 1、变量名是：p，指针类型是：*int，指向匿名的 int 变量（这里的匿名是指，指针是匿名的）
	p := new(int)
	fmt.Println(*p)
	// 2、设置 int匿名变量的值是2
	*p = 2
	fmt.Println(*p)
	// 3、通过调用函数实现，函数中使用了new,返回的值是：*int指针，返回一个地址值num
	num := newInt()
	fmt.Println(num)
	// 4、每次调用new函数都是返回一个新的变量的地址，所以m和n地址是不相同的
	m := newInt()
	n := newInt()
	fmt.Println(m == n)

}

// 定义new函数
func newInt() *int {
	return new(int)
}

// 上面定义new函数等价与下面
//func newInt() *int {
//	var num int
//	return &num
//}
